๐ Java ์ค๊ธ 1ํธ ํต์ฌ ์์ฝ ์ด์ ๋ฆฌ
NOTE
Object ํด๋์ค, ๋ถ๋ณ ๊ฐ์ฒด, String, ๋ํผ/Enum, java.time, ์ค์ฒฉ/์ต๋ช ํด๋์ค, ์์ธ ์ฒ๋ฆฌ ๋ฑ Java ์ค๊ธ 1ํธ ํต์ฌ ์์ฝ.
๐ ๊ฐ๋
1. Object ํด๋์ค: ๋ชจ๋ ๊ฐ์ฒด์ ๋ฟ๋ฆฌ
- ๊ฐ๋
: ์๋ฐ์ ๋ชจ๋ ํด๋์ค๋ ์ต์์ ๋ถ๋ชจ์ธ
Object๋ฅผ ์๋์ผ๋ก ์์๋ฐ์ต๋๋ค. - ์ ์ฌ์ฉํ๋๊ฐ?: ๊ณตํต ๊ธฐ๋ฅ์ ์ ๊ณตํ๊ณ , ๋ชจ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋คํ์ฑ์ ์ ์ ์ ์ ๊ณตํฉ๋๋ค.
- ํต์ฌ ๋ฉ์๋:
toString(): ๊ฐ์ฒด์ ์ํ๋ฅผ ๋ฌธ์์ด๋ก ํํ (๋๋ฒ๊น ํ์).equals(): **๋์ผ์ฑ(==, ์ฃผ์๊ฐ)**์ด ์๋ ๋๋ฑ์ฑ(๋ ผ๋ฆฌ์ ๊ฐ์) ๋น๊ต๋ฅผ ์ํด ๋ฐ๋์ ์ค๋ฒ๋ผ์ด๋ฉ ํ์.hashCode():equals๋ฅผ ์ฌ์ ์ํ๋ค๋ฉด ํด์ ๊ธฐ๋ฐ ์ปฌ๋ ์ ์ ์ํด ๋ฐ๋์ ํจ๊ป ์ฌ์ ์.
2. ๋ถ๋ณ ๊ฐ์ฒด (Immutable Object): ์์ ํ ๊ณต์
- ๊ฐ๋ : ๊ฐ์ฒด ์์ฑ ํ ๋ด๋ถ์ ์ํ(ํ๋)๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด.
- ์ ์ฌ์ฉํ๋๊ฐ?: ์ฌ๋ฌ ๋ณ์๊ฐ ํ๋์ ๊ฐ์ฒด๋ฅผ ๊ณต์ ํ ๋ ๋ฐ์ํ๋ **์ฌ์ด๋ ์ดํํธ(Side Effect)**๋ฅผ ์์ฒ ์ฐจ๋จํฉ๋๋ค.
- ํต์ฌ ์ค๊ณ:
- ํ๋๋ฅผ
final๋ก ์ ์ธํ๊ณ Setter๋ฅผ ๋ง๋ค์ง ์์. - ๊ฐ ๋ณ๊ฒฝ์ด ํ์ํ๋ฉด ๊ธฐ์กด ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ๋์ , ๋ณ๊ฒฝ๋ ๊ฐ์ ๊ฐ์ง ์๋ก์ด ๊ฐ์ฒด๋ฅผ ์์ฑํ์ฌ ๋ฐํ.
- ํ๋๋ฅผ
3. String ํด๋์ค: ๋ฌธ์์ด์ ๋ชจ๋ ๊ฒ
- ํน์ง: ์๋ฐ์
String์ ๋ํ์ ์ธ ๋ถ๋ณ ๊ฐ์ฒด์ ๋๋ค. - String Pool: ๋ฆฌํฐ๋ด๋ก ์์ฑ๋ ๋ฌธ์์ด์ ํ ์์ญ์ ์ ์ฉ ๊ณต๊ฐ์ ์ ์ฅ๋์ด ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ ์ฝํฉ๋๋ค.
- ์ฑ๋ฅ ์ต์ ํ:
- ๋จ์ ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํด ์ฃผ์ง๋ง, ๋ฐ๋ณต๋ฌธ ๋ด ์ฐ๊ฒฐ์ ๋ฐ๋์
StringBuilder๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. StringBuilder๋ ๊ฐ๋ณ(Mutable)์ด๋ฏ๋ก ๋ด๋ถ ๋ฒํผ๋ฅผ ์ง์ ์์ ํ์ฌ ์ฑ๋ฅ์ด ๋ฐ์ด๋ฉ๋๋ค.
- ๋จ์ ๋ฌธ์์ด ์ฐ๊ฒฐ์ ์ปดํ์ผ๋ฌ๊ฐ ์ต์ ํํด ์ฃผ์ง๋ง, ๋ฐ๋ณต๋ฌธ ๋ด ์ฐ๊ฒฐ์ ๋ฐ๋์
4. ๋ํผ ํด๋์ค & Enum: ํ์ ์์ ์ฑ
- Wrapper Class:
int๊ฐ์ ๊ธฐ๋ณธํ์Integer๊ฐ์ ๊ฐ์ฒด๋ก ๊ฐ์ธ๋ ๊ฒ.nullํํ์ด ๊ฐ๋ฅํ๊ณ ์ ๋ค๋ฆญ์์ ํ์์ ๋๋ค. (์คํ ๋ฐ์ฑ/์ธ๋ฐ์ฑ ์ง์) - Enum (์ด๊ฑฐํ): ๊ด๋ จ ์๋ ์์๋ฅผ ๋ชจ์ ์ ์ํ ํน์ํ ํด๋์ค.
- ์ฅ์ : ํ์ฉ๋์ง ์๋ ๊ฐ์ด ๋ค์ด์ค๋ ๊ฒ์ ์ปดํ์ผ ์์ ์ ๋ง์์ฃผ๋ ํ์ ์์ ์ฑ ์ ๊ณต.
- ํ์ฉ: ๋จ์ ์์๋ฅผ ๋์ด ํ๋์ ๋ฉ์๋๋ฅผ ์ถ๊ฐํด ๋น์ฆ๋์ค ๋ก์ง์ ๋ดํฌํ ์ ์์.
5. ๋ ์ง์ ์๊ฐ (java.time): ํ์ค API
- ๊ฐ๋
: Java 8๋ถํฐ ๋์
๋
LocalDate,LocalDateTime๋ฑ. - ์ ์ฌ์ฉํ๋๊ฐ?: ๊ธฐ์กด
Date,Calendar์ ๊ฒฐํจ(๊ฐ๋ณ์ฑ, ๋ณต์กํ ์ ๊ณ์ฐ ๋ฑ)์ ํด๊ฒฐํ๊ธฐ ์ํด ๋์ . - ํต์ฌ ํน์ง:
- ๋ถ๋ณ(Immutable): ๋ชจ๋ ๊ณ์ฐ ๋ฉ์๋๋ ์๋ก์ด ๊ฐ์ฒด๋ฅผ ๋ฐํํจ.
- ๋ช
ํ์ฑ:
Period(๋ ์ง ์ฐจ์ด),Duration(์๊ฐ ์ฐจ์ด) ๋ฑ์ผ๋ก ๊ตฌ๋ถ์ด ๋ช ํํจ.
6. ์ค์ฒฉ & ์ต๋ช ํด๋์ค: ์บก์ํ์ ๊ทน์น
- ์ ์ ์ค์ฒฉ ํด๋์ค: ์ธ๋ถ ํด๋์ค์ ๋ฐ์ ํ์ง๋ง ์ธ์คํด์ค ๊ฐ ๊ณต์ ๊ฐ ์์ ๋ ์ฌ์ฉ.
- ๋ด๋ถ ํด๋์ค: ์ธ๋ถ ์ธ์คํด์ค์ ๋ฉค๋ฒ์ ์ ๊ทผํด์ผ ํ ๋ ์ฌ์ฉ.
- ์ต๋ช ํด๋์ค: ์ด๋ฆ ์์ด ์ฆ์์์ ์ธํฐํ์ด์ค/ํด๋์ค๋ฅผ ๊ตฌํ. ์ผํ์ฑ ๋ก์ง์ ์ฐ์ด๋ฉฐ, ์๋ฐ 8๋ถํฐ๋ **๋๋ค(Lambda)**๋ก ๋์ฒด ๊ฐ๋ฅ.
7. ์์ธ ์ฒ๋ฆฌ (Exception): ํ๋ก๊ทธ๋จ์ ๋ฐฉ์ด๋ง
- ์์ธ ๊ณ์ธต:
ThrowableโError(์์คํ ์ฅ์ ) &Exception(์ ํ๋ฆฌ์ผ์ด์ ์์ธ). - ์ฒดํฌ ์์ธ vs ์ธ์ฒดํฌ ์์ธ:
- Checked: ์ปดํ์ผ๋ฌ๊ฐ ์ฒ๋ฆฌ๋ฅผ ๊ฐ์ ํจ. ์ธ๋ถ์ ์์กดํ๋ ๋ก์ง์ ์ฌ์ฉ.
- Unchecked (RuntimeException): ๊ฐ๋ฐ์์ ์ค์๋ก ๋ฐ์ํ๋ ์์ธ. ์ฒ๋ฆฌ๊ฐ ๊ฐ์ ๋์ง ์์.
- Try-With-Resources:
AutoCloseable์ ๊ตฌํํ ์์์ ์๋์ผ๋ก ๋ซ์์ค (๋ฉ๋ชจ๋ฆฌ ๋์ ๋ฐฉ์ง).
๐ ํ์ต ํ๊ธฐ
โ์๋ฐ ์ค๊ธ 1ํธ์ ๋จ์ํ ๋ฌธ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ณผ์ ์ด ์๋๋ผ, **๊ฐ์ฒด ์งํฅ ์ค๊ณ์ ํต์ฌ์ธ โ๋ถ๋ณ์ฑโ๊ณผ โํ์ ์์ ์ฑโ**์ ์ด๋ป๊ฒ ์ค๋ฌด ์ฝ๋๋ก ๋ น์ฌ๋ด๋์ง ๋ฐฐ์ฐ๋ ๊ณผ์ ์ด์๋ค.โ